import logging
import os
from datetime import datetime
from logging import handlers

from config.constants import LOGS_PATH
import logging.handlers


def setup_logger():
    """配置日志系统并返回日志器（整合版）"""
    # 创建日志目录（如果不存在）
    os.makedirs(LOGS_PATH, exist_ok=True)

    # 生成带时间戳的日志文件名（基础文件名，实际会按时间切割）
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    base_log_file = os.path.join(LOGS_PATH, f"system.{timestamp}")

    # 获取根日志器（捕获所有日志）
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)  # 设置全局最低级别为DEBUG

    # 清除所有现有处理器（避免重复添加）
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)

    # 自定义 namer 函数
    def namer(name):
        # 示例：将 "system.20250707_160056" 转换为 "2025_07_07_160056"
        if '.' in name:
            prefix, suffix = name.split('.', 1)  # 分割前缀和后缀
            # 假设 suffix 是 "20250707_160056" 格式
            date_part, time_part = suffix.split('_', 1)  # 分割日期和时间
            # 重新格式化日期部分为 "YYYY_MM_DD"
            formatted_date = f"{date_part[:4]}_{date_part[4:6]}_{date_part[6:8]}"
            return f"{formatted_date}_{time_part}"
        return name  # 如果没有点，直接返回原文件名

    # 1. TimedRotatingFileHandler（按时间切割日志）
    file_handler = handlers.TimedRotatingFileHandler(
        filename=base_log_file,
        when='D',  # 切割单位：'S'秒, 'M'分, 'H'时, 'D'天, 'W'周
        interval=1,  # 间隔1个单位
        backupCount=2,  # 保留的日志文件数量
        encoding='utf-8'
    )
    file_handler.namer = namer  # 设置自定义 namer
    file_handler.suffix = "%Y-%m-%d_%H-%M-%S.log"  # 设置后缀格式
    file_handler.setLevel(logging.DEBUG)  # 文件记录所有级别

    # 2. 控制台处理器（可根据需要设置不同级别）
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)  # 控制台只显示INFO及以上

    # 详细的日志格式
    formatter = logging.Formatter(
        '%(asctime)s -> %(name)s -> %(levelname)s -> %(filename)s--%(module)s:%(lineno)d -> %(message)s'
    )

    # 应用格式到处理器
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    # 添加处理器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    # 配置常见第三方库的日志级别
    logging.getLogger('urllib3').setLevel(logging.WARNING)
    logging.getLogger('requests').setLevel(logging.WARNING)

    return logger, f"{base_log_file}.log"  # 返回日志器和日志文件路径
# 便捷日志方法
def log_message(message, level=logging.INFO):
    """记录日志的便捷方法"""
    logging.log(level, message)


# # 初始化日志系统
# setup_logger()